package org.shoukaiseki.inittable.service;


import org.shoukaiseki.inittable.domain.*;

import java.util.ArrayList;
import java.util.List;

/**
 *
 **/

public interface ITableBuildInfoService {

    //在实现类中,添加该常量，用于其他表中创建关联外键
//    public static final String TABLE_NAME="sys_organize";

    //在实现类中,如果字段用于其他业务关联，添加该常量，用于其他表中创建关联该字段
//    public static final String COLUMN_ORG_ID="org_id";

    public List<TableColumnInfo> tableColumnInfoList();

    /**
     * 索引命名时，非唯一索引必须按照“idx_字段名称字段名称[字段名]”进行命名，唯一索引必须按照“uniq_字段名称字段名称[字段名]”进行命名
     * 约束命名时，主键约束：pk_表名称。唯一约束：udx_表名称_字段名。（应用中需要同时有唯一性检查逻辑。）
     *
     * @return
     * {@code
      <pre>
        return tableIndexs(
            null
        );
       </<pre>
     * }
     */
    public default List<TableIndexInfo> tableIndexInfoList(){
        return new ArrayList<>();
    }


    public default List<TableConstraintInfo> tableConstraintInfoList(){
        return new ArrayList<>();
    }

    /**
     * 触发器命名时，trg_表名_操作
     * @return
     * {@code
        <pre>
            return tableTriggers(rowstampTriggerBuilderFromTableName(TABLE_NAME)
            );
    </<pre>
     * }
     */
    public default List<TableTriggerInfo> tableTriggerList() {
        return new ArrayList<>();
    }

    /**
     * 新建表时候初始化表数据
     * @return
     */
    public default List<String> createTableInitDataList(){
        return new ArrayList<>();
    }

    /**
     * 函数过程命名时，采用动词+名词的形式表达其含义。
     * 序列命名时，seq_表名
     */
}
